Exerccios 9 - Construo de Funes Simples


##1. - Exerccio Programar 1.: QUE FRIO!

#1.1 - Construa uma funo que calcula automaticamente o valor de graus Celsius, sabendo-se a temperatura em Fahrenheit. C = 5/9 * (F- 32) 

conv.FC <- function(x)
	{
	dados=na.omit(x)
	faren = x
	Celsius = c(rep(0,length(x)))
	for(i in 1:length(x))
		{
		Celsius[i] = (5/9)*(x[i]-32)
		}
	return(Celsius)
	}

faren = c(32,212)
conv.FC(faren)

[1]   0 100

#2. : Anlise exploratria simultnea de duas variveis

Crie uma funo para sada grfica de anlises exploratrias de duas variveis. Essa sada pode ter por exemplo boxplot, histograma, qq norm e y por x. A funo deve permitir a entrada de dois objetos vetores de mesmo tamanho (x e y). Caso os valores de x e y forem desenhados em um mesmo grfico, defina cores diferentes. As legendas devem ser em portugus e a sada (return) deve apresentar o sumrio das duas variveis e o coeficiente de correlao. DICAS: 

Para histogramas com variveis em um mesmo grfico pode ser utilizada a funo multhist() do pacote plotrix. Baixe e instale o pacote e veja o help da funo 

Utilize o cdigo do eda.shape, apresentado em aula como ponto de partida. 

Lembre-se que em algumas funes grficas o argumento add=TRUE, adiciona elementos no grfico no anterior. 

a = c(round(runif(10,1,20),0))
b = c(round(runif(10,1,50),0))


eda.shape.GUTO <- function(x,y)
	{
		z =length(x)!=length(y)
		lista = list(x,y)
		if (z=="TRUE")
		{
		cat("\t"," Vetores de comprimentos diferentes\n")
		#return(NA)
		}
		else
		{
		library(plotrix)
		x11()
		par(mfrow = c(2,2))
		multhist(lista, main="Histograma de x e y", col=c("red","blue"))
		boxplot(lista, col=c("red","blue"), main="BoxPlot de x e y")
		plot(y,col="red",xlab="",ylab="y", main="Funo de y e x")
		par(new=T)
		plot(x,col="blue",xlab="",ylab="x", main="Funo de y e x", ann=F, axes=F)
		axis(4)
		qqnorm(y,col="red",main="Grfico Quantil x Quantil",xlab="Quantil Terico",ylab="Quantil da Amostra")
		qqline(y)
		par(new=T)
		qqnorm(x,col="blue",main="Grfico Quantil x Quantil",xlab="Quantil Terico",ylab="Quantil da Amostra")
		qqline(x)
		axis(4)
		par(mfrow=c(1,1))
		}
	}

eda.shape.GUTO(a,b)


#3. : ndices de Diversidade de Espcies

#ndice de Shannon: H = - sum(pi * ln(pi)) 

# ndice de Simpson: D = sum(pi^2)

#Criando os vetores de especies e de nmero de individuos

esp=paste("especie",1:20)
par1 = sample(round(c(runif(4,21,40),runif(4,10,20),runif(4,1,9),runif(8,1,3)),0))
par2 = sample(round(c(runif(4,21,40),runif(4,10,20),runif(4,1,9),runif(8,1,3)),0))
par3 = sample(round(c(runif(4,21,40),runif(4,10,20),runif(4,1,9),runif(8,1,3)),0))
list.esp=data.frame(esp,par1,par2,par3)
list.esp[10,2] = NA
log(0)

# Funcao diversidade, calcula os indices de Shannon e Simpson
# Necessariamente o data.frame deve conter na primeira coluna as espcies, seguida de um nmero qualquer de areas 

Diversidade = function(x)
	{
	
	list.esp=x

	dim(list.esp) #Verifica a dimenso de x e captura o nmero de linhas e colunas
	n=dim(list.esp)[2]-1#Subtracao da coluna de especies para facilitar a indexacao
	l=dim(list.esp)[1]

		#Transforma os NA em 0, no Shannon os valores 0 se tornaram NaN e so corridos novamente no final da funo
		for (i in 1:n)
		{
		list.esp[is.na(list.esp[,i+1])==T, i+1] = 0
		}

	#Cria os vetores necessarios para os loops
	Pi=data.frame(rep(0,l))
	H=data.frame(rep(0,l))
	D=data.frame(rep(0,l))
		#Cria os data.frames necessarios para os loops
### Obs: Professor, eu conseguiria criar os data.frames de uma vez, sem ter que utilizar 2 FOR pra isso ? ###
		for (k in 1:(n-1))
		{
		Pi=data.frame(Pi,rep(0,l))
		H=data.frame(H,rep(0,l))
		D=data.frame(D,rep(0,l))
		}

		#Calculo dos indices de Shannon e Simpson
		for (i in 1:n) #indexa o numero de colunas
		{
			for (j in 1:l)#indexa o numero de linhas
			{
			Pi[j,i] = list.esp[j,i+1]/sum(list.esp[,i+1])
			H[j,i] = -(Pi[j,i] * log(Pi[j,i]))
			D[j,i] = (Pi[j,i]^2)
			}
		}
		#Corrige os NaN gerados pelo log do indice de Shannon antes de realizar o somatorio
		for (i in 1:n)
		{
		H[is.nan(H[,i])==T, i] = 0
		D[is.nan(D[,i])==T, i] = 0
		}
	names(H) = paste("Area",1:n)
	names(D) = paste("Area",1:n)
	return(list(H=apply(H,2,sum),D=apply(D,2,sum))) #Retorna uma lista com os indices de Shannon e Simpson
	}

Diversidade(list.esp)

Diversidade(list.esp)
